package dmp

import (
	"os"

	"github.com/akamensky/argparse"
	"github.com/mingrammer/cfmt"
)

type Parser struct {
	username  *string // 账号
	password  *string // 密码
	info      *string // 描述
	list      *bool   // 查看所有账号密码
	change_id *int    // 更新账号密码
	delete_id *int    // 删除账号密码
}

func NewParser() *Parser {

	parser := argparse.NewParser("命令列表", `
	添加账号密码:
		dmp -u 账号 -p 密码
		dmp --user 账号 --pass 密码

	添加账号密码:
		dmp -u 账号 -p 密码 -i 描述
		dmp --user 账号 --pass 密码 --info 描述

	查看所有账号密码:
		dmp -l
		dmp --list
	
	更新账号密码:
		dmp -c id -u 账号 -p 密码 -i 描述
		dmp --change id --user 账号 --pass 密码 --info 描述
	
	删除账号密码:
		dmp -d id
		dmp --delete id
	`)

	var u = parser.String("u", "user", &argparse.Options{Help: "账号"})
	var p = parser.String("p", "pass", &argparse.Options{Help: "密码"})
	var i = parser.String("i", "info", &argparse.Options{Help: "描述"})
	var l = parser.Flag("l", "list", &argparse.Options{Help: "查看所有账号密码"})
	var c = parser.Int("c", "change", &argparse.Options{Help: "更新账号密码"})
	var d = parser.Int("d", "delete", &argparse.Options{Help: "删除账号密码"})
	var err = parser.Parse(os.Args)

	if err != nil {
		cfmt.Info(parser.Usage(err))
		// 解析出错就退出
		os.Exit(0)
	}

	return &Parser{
		username:  u,
		password:  p,
		info:      i,
		list:      l,
		change_id: c,
		delete_id: d,
	}
}

func (p *Parser) Run() {
	if *p.list {
		List()
		return
	}
	if *p.change_id != 0 {
		Change(p.change_id, p.username, p.password, p.info)
		return
	}
	if *p.delete_id != 0 {
		Delete(p.delete_id)
		return
	}
	if *p.username != "" && *p.password != "" {
		Add(p.username, p.password, p.info)
		return
	}
}
